#coding:utf-8

'''注册的视图'''

from ihome.api_1_0 import api
from flask import request, jsonify, current_app, session
from ihome.utils.response_code import RET
from ihome import redis_store
from ihome.models import User
from ihome import db

import re


# route为用户user,是因为设置的user数据
@api.route('/user',methods=['POST'])
def register():
    '''
    注册视图
    接收参数: json数据
            手机号
            短信验证码
            密码
            重复密码
    验证参数
    逻辑处理
            保存模型类user
    返回

    细节处理:
            用过一次的短信验证码让他失效

    :return:


    '''
    # 获取参数
    req_dict = request.get_json()
    # req_dict = request.data
    # print(req_dict)


    mobile = str(req_dict.get('mobile'))
    mobile_text = str(req_dict.get('mobile_text'))
    pwd = str(req_dict.get('pwd'))
    repwd = str(req_dict.get('repwd'))


    # 验证参数
    if not all([mobile,mobile_text,pwd,repwd]):
        return jsonify(errno=RET.PARAMERR,errmsg="参数不完全")

    if not re.match(r'1[3578]\d{9}',mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号出错")

    if pwd != repwd:
        return jsonify(errno=RET.PARAMERR, errmsg="重复密码错误")


    # 验证短信验证码
    key = 'sms_text_' + mobile
    try:
        real_sms_code =  redis_store.get(key)
        # 用过一次的短信验证码让他失效
        redis_store.delete(key)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg="数据取出错误")

    if real_sms_code != mobile_text:
        return jsonify(errno=RET.PARAMERR, errmsg="验证码失效")


    # 存用户
    user = User()
    user.name = mobile
    user.mobile = mobile
    # 对密码做特殊处理,即存放sha256加密模式
    # 对于具体的方法,用模型类定义@property来重写一个类型
    user.password = pwd

    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        # db.session.rollback()

        #todo 需要回退
        db.session.rollback()  #比方注册过的信息,就不能再次注册
        return jsonify(errno=RET.DBERR, errmsg="读取数据库错误")

    else:
        #todo 存放session,放用户信息
        session['user_id'] = user.id
        session['user_name'] = user.name
        session['user_mobile'] = user.mobile

        return jsonify(errno=RET.OK, errmsg="存数据成功")

